package mylab.starters.dag.task;

import java.util.concurrent.TimeUnit;

/**
 * DAG执行引擎
 */
public interface Engine {

    default void syncRun(EngineCallback callback) {
        syncRun(Long.MAX_VALUE, TimeUnit.MILLISECONDS, callback);
    }

    default void asyncRun(EngineCallback callback) {
        asyncRun(Long.MAX_VALUE, TimeUnit.MILLISECONDS, callback);
    }

    /**
     * 执行任务-阻塞式
     *
     * @param timeout  总的超时时间
     * @param timeUnit 超时时间单位
     * @param callback 引擎回调
     */
    void syncRun(long timeout, TimeUnit timeUnit, EngineCallback callback);

    /**
     * 执行任务-非阻塞式
     *
     * @param timeout  总的超时时间
     * @param timeUnit 超时时间单位
     * @param callback 引擎回调
     */
    void asyncRun(long timeout, TimeUnit timeUnit, EngineCallback callback);

    void abort(boolean interrupt);

    boolean isAborted();

    EngineCallback getEngineCallback();

}
